/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.Date;
import java.util.List;
import model.Equipo;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Silvita
 */
public class EquipoDAO {
    
    /**
     * Permite obtener todos los equipos registrados.
     * @return {@code List<Equipo>} una lista que contiene toda la información de todos los equipos registrados.
     * @throws HibernateException {@code HibernateException} si no se pudo conectar u obtener datos de la base.
     * @throws Exception {@code HibernateException} si no se pudo conectar u obtener datos de la base.
     */
    public List<Equipo> obtenerEquipos() throws HibernateException, Exception{ 
        List<Equipo> equipos =null;
        MyFactory mf = new MyFactory();
        Session ses = mf.getSf().openSession(); 
        try { 
            ses = mf.getSf().openSession(); 
            equipos = ses.createCriteria(Equipo.class).list();
        }catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }
        finally{
            ses.close();
            mf.getSf().close();
        }
        return equipos; 
    }
    
    public boolean guardarEquipo(Equipo equipo, String usuActivo) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            equipo.setUsuCreacionEquipo(usuActivo);
            equipo.setFecCreacionEquipo(new Date()); //new Date()
            equipo.setUsuModifEquipo(usuActivo);
            equipo.setFecModifEquipo(new Date());
            equipo.setActivo(true);
            s.save(equipo);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
    }
    
    public boolean modificarEquipo(Equipo equipo, String usuActivo,int id) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            equipo.setIdEquipo(id); 
            equipo.setUsuModifEquipo(usuActivo);
            equipo.setFecModifEquipo(new Date());
            equipo.setActivo(true);
            s.update(equipo);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
    }
    
     public boolean eliminarEquipo(int id) throws Exception{
        
        boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Equipo equipo = (Equipo) s.createCriteria(Equipo.class).add(Restrictions.eq("idEquipo", new Integer(id))).uniqueResult();
            Transaction tx = s.beginTransaction();
            s.delete(equipo);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;
        /*boolean resp=false;
        MyFactory mf = new MyFactory();
        Session s = mf.getSf().openSession();
        try{
            Transaction tx = s.beginTransaction();
            equipo.setIdEquipo(id); 
            equipo.setUsuModifEquipo(usuActivo);
            equipo.setFecModifEquipo(new Date());
            equipo.setActivo(false);
            s.update(equipo);
            tx.commit();
            resp=true;
        }
        catch(Exception e){
            throw new Exception("Error: " + e.getMessage());
        }  
        finally{
            s.close();
            mf.getSf().close();
        }
        
        return resp;*/
    }
    
}
